package me.sealer.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;

/**
 * 功能描述： $ FilesEncodingConvertUtil
 *
 * @author sealer
 * @email 1178884049@qq.com
 * @date 2019年04月23日 12时37分07秒
 */
public class FilesEncodingConvertUtil {
    /**
     * 遍历文件
     *
     * @param file 需要遍历的文件父目录
     */
    public static void convertFiles(File file) throws IOException {

        File rootFile = file;
        File[] files = rootFile.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isDirectory()) {
                    // 递归调用子文件夹下的文件
                    convertFiles(f);
                } else {
                    convertFile(f);
                }
            }
        }
    }

    /**
     * 单个文件编码转换
     *
     * @param file 待转换编码的文件
     */
    public static void convertFile(File file) throws IOException {
        // 此处是由于一些文件设置了只读选项， 需要设置为可写， 重要！！！
        file.setWritable(true);
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader
                    (new FileInputStream(file), Charset.forName("GBK")));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        StringBuilder sb = new StringBuilder();

        String str;
        while ((str = br.readLine()) != null) {
            sb.append(str);
            sb.append("\n");
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter
                (new FileOutputStream(file), Charset.forName("UTF-8")));
        bw.write(sb.toString());
        bw.flush();
        bw.close();
        br.close();
    }

    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\sealer\\Desktop\\test\\cardStages\\csii-pp-stages\\src");
        convertFiles(file);
    }
}
